<!-- 
  前面讲过的知识点：
    1）响应式  监听数据的变化  get   set 
    2）模板编译   生成render函数   执行render函数生成一个vnode
    3）vdom   根据vdom渲染成真实DOM，或更新真实DOM  走patch和diff

  说一下vue初始渲染的过程：
    第一步：解析模板为render函数
    第二步：触发响应式，监听data中的属性，getter和setter
    第三步：执行render函数，生成vnode。这一步会触发data中的getter，在getter中会进行依赖收集（把数据观察起来），不一定所有的数据都会被观察，是否被观察取决于模板中是否使用。
    第四步：把vnode转化成真实DOM，渲染到页面。

  数据更新了：
    第一步：修改数据，会触发setter。
    第二步：重新执行render函数，生成新的vnode。
    第三步：进行patch(oldVnode,newVnode)，patch的过程就是diff的过程。xxxxxx 

  对于上面的渲染流程，vue官网也是有一张图的，如下：
    https://v2.cn.vuejs.org/v2/guide/reactivity.html

  异步渲染：
    更新时，patch(oldVnode,newVnode)，patch的过程，就是diff的过程，找到差异，更新渲染dom。
    这个渲染过程是异步的。为什么要把渲染设计成异步的？
    答：如果是同步，就意味着，一个数据变化，需要立即更新视图，100个数据变了，就需要更新100次视图。
       如果设计成异步的，汇总data中的数据变化，一次性渲染，尽可能少的渲染，提高性能。

  vue中的三大原理：
    1）数据响应式  监听data的属性，把这些属性处理成getter和setter。对数组中的7大方法重写。
    2）模板编译  编译成render函数  执行render函数，生成vnode，vnode进而转化成真实DOM。
    3）vdom和diff   更新数据  重新render 生成新的vnode，patch(oldVnode，newVnode)。

  渲染和响应式有什么关系？
  渲染和模板编译有什么关系？
  渲染和vdom有什么关系？
 -->